package club.hicode.daydayup.proxy.java;

import club.hicode.daydayup.proxy.IRunable;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 模拟的代理类
 *
 * @author Liu Chunfu
 * @date 2018-05-03 上午10:04
 **/
public class GPProxy implements InvocationHandler {

    /**
     * 原生的操作对象
     */
    private Object oriObj;

    public GPProxy(Object oriObj) {
        this.oriObj = oriObj;
    }

    public IRunable getProxy() {
        return (IRunable) Proxy.newProxyInstance(oriObj.getClass().getClassLoader(), new Class[]{IRunable.class}, this::invoke);
    }

    /**
     * @param proxy  不能获取，否则会出问题
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //System.out.println(proxy);
        //System.out.println(proxy==getProxy());
        Object invoke = method.invoke(oriObj, args);
        //假设这里要调用的方法，应该是原生对象的调用.
        System.out.println("nonono");

        return invoke;
    }
}
